Permissions APIμ λν μ¬μΈ΅ λΆμ: μ΄ APIκ° μ΄λ»κ² λΈλΌμ°μ κΆν κ΄λ¦¬λ₯Ό κ°ννκ³ , μ¬μ©μ κ°μΈμ 보λ₯Ό 보νΈνλ©°, μΉ μ¬μ©μ κ²½νμ κ°μ νλμ§ μμλ΄ λλ€.
κΆν API: λΈλΌμ°μ κΆν κ΄λ¦¬μ μ¬μ©μ κ°μΈμ 보 보νΈ
Permissions APIλ νλ μΉ κ°λ°μ ν΅μ¬ κ΅¬μ± μμλ‘, μΉμ¬μ΄νΈκ° λ―Όκ°ν μ¬μ©μ λ°μ΄ν° λ° κΈ°κΈ° κΈ°λ₯μ λν μ κ·Όμ μμ²νκ³ κ΄λ¦¬νλ νμ€νλ λ°©λ²μ μ 곡ν©λλ€. μ΄ APIλ κΈ°λ₯μ±κ³Ό μ¬μ©μ κ°μΈμ 보 λ³΄νΈ μ¬μ΄μ κ· νμ λ§μΆλ λ° μ€μν μν μ νλ©°, μ¬μ©μκ° μΉμ¬μ΄νΈκ° μ κ·Όν μ μλ μ 보μ κΈ°λ₯μ μ μ΄ν μ μλλ‘ λ³΄μ₯ν©λλ€. μ΄ μ’ ν© κ°μ΄λμμλ Permissions APIμ κΈ°λ₯, ꡬν, 보μ κ³ λ € μ¬ν, κ·Έλ¦¬κ³ μ¬μ©μ μΉνμ μ΄κ³ κ°μΈμ 보λ₯Ό μ‘΄μ€νλ μΉ μ ν리μΌμ΄μ μ λ§λ€κΈ° μν λͺ¨λ² μ¬λ‘λ₯Ό μμΈν μ΄ν΄λ΄ λλ€.
Permissions APIμ νμμ± μ΄ν΄νκΈ°
Permissions APIμ κ°μ νμ€νλ APIκ° λ±μ₯νκΈ° μ μλ λΈλΌμ°μ κΆν μ²λ¦¬κ° μ’ μ’ μΌκ΄μ±μ΄ μκ³ μ¬μ©μ κ²½νμ μ ν΄νμ΅λλ€. μΉμ¬μ΄νΈλ μΆ©λΆν λ§₯λ½μ΄λ μ λΉμ±μ μ 곡νμ§ μμ μ± λ¬΄ν±λκ³ κΆνμ μμ²νλ κ²½μ°κ° λ§μμ΅λλ€. μ΄λ¬ν κ΄νμ μ¬μ©μκ° μ΄ν΄νμ§ λͺ»νλ κΆνμ λ§Ήλͺ©μ μΌλ‘ λΆμ¬νκ² λ§λ€μ΄ λ―Όκ°ν μ λ³΄κ° λ ΈμΆλ κ°λ₯μ±μ λ³μμ΅λλ€. Permissions APIλ λ€μκ³Ό κ°μ λ°©λ²μΌλ‘ μ΄λ¬ν λ¬Έμ λ₯Ό ν΄κ²°ν©λλ€:
- κΆν μμ² νμ€ν: μ¬λ¬ λΈλΌμ°μ μ κ±Έμ³ μΉμ¬μ΄νΈκ° μΌκ΄λ λ°©μμΌλ‘ κΆνμ μμ²ν μ μλ λ°©λ²μ μ 곡ν©λλ€.
- μ¬μ©μ μ μ΄ κ°ν: μ¬μ©μκ° λΆμ¬νλ κΆνμ λν΄ λ μΈλΆνλ μ μ΄κΆμ μ 곡ν©λλ€.
- μ¬μ©μ κ²½ν κ°μ : μΉμ¬μ΄νΈκ° μν©μ λ§κ² κΆνμ μμ²νκ³ νΉμ κΈ°λ₯μ λν μ κ·Όμ΄ νμν μ΄μ λ₯Ό λͺ ννκ² μ€λͺ ν μ μλλ‘ ν©λλ€.
- κ°μΈμ 보 λ³΄νΈ μ¦μ§: λΆνμν κΆν μμ²μ μ΅μννκ³ λ°μ΄ν° μ¬μ©μ λν λͺ νν ν¬λͺ μ±μ μ 곡ν¨μΌλ‘μ¨ κ°λ°μκ° μ¬μ©μ κ°μΈμ 보λ₯Ό μ‘΄μ€νλλ‘ μ₯λ €ν©λλ€.
Permissions APIμ ν΅μ¬ κ°λ
Permissions APIλ λͺ κ°μ§ ν΅μ¬ κ°λ μ μ€μ¬μΌλ‘ μλν©λλ€:1. κΆν μ€λͺ μ(Permission Descriptors)
κΆν μ€λͺ μλ μμ²λλ κΆνμ μ€λͺ νλ κ°μ²΄μ λλ€. μΌλ°μ μΌλ‘ κΆνμ μ΄λ¦κ³Ό ν΄λΉ νΉμ κΆνμ νμν μΆκ° λ§€κ°λ³μλ₯Ό ν¬ν¨ν©λλ€. μμλ λ€μκ³Ό κ°μ΅λλ€:
{
name: 'geolocation'
}
{
name: 'camera',
video: true
}
2. navigator.permissions.query()
navigator.permissions.query() λ©μλλ Permissions APIμ μ£Όμ μ§μ
μ μ
λλ€. κΆν μ€λͺ
μλ₯Ό μΈμλ‘ λ°μ PermissionStatus κ°μ²΄λ‘ νμΈλλ νλ‘λ―Έμ€(Promise)λ₯Ό λ°νν©λλ€.
navigator.permissions.query({ name: 'geolocation' })
.then(function(result) {
if (result.state === 'granted') {
// κΆνμ΄ λΆμ¬λ¨
console.log('μμΉ μ 보 κΆνμ΄ λΆμ¬λμμ΅λλ€.');
} else if (result.state === 'prompt') {
// κΆν μμ²μ΄ νμν¨
console.log('μμΉ μ 보 κΆν μμ²μ΄ νμν©λλ€.');
} else if (result.state === 'denied') {
// κΆνμ΄ κ±°λΆλ¨
console.log('μμΉ μ 보 κΆνμ΄ κ±°λΆλμμ΅λλ€.');
}
result.onchange = function() {
console.log('κΆν μνκ° ' + result.state + '(μΌ)λ‘ λ³κ²½λμμ΅λλ€.');
};
});
3. PermissionStatus κ°μ²΄
PermissionStatus κ°μ²΄λ κΆνμ νμ¬ μνμ λν μ 보λ₯Ό μ 곡ν©λλ€. λ κ°μ§ μ£Όμ μμ±μ΄ μμ΅λλ€:
state: κΆνμ νμ¬ μνλ₯Ό λνλ΄λ λ¬Έμμ΄μ λλ€. κ°λ₯ν κ°μ λ€μκ³Ό κ°μ΅λλ€:granted: μ¬μ©μκ° κΆνμ λΆμ¬νμ΅λλ€.prompt: μ¬μ©μκ° μμ§ κΆνμ λν κ²°μ μ λ΄λ¦¬μ§ μμμ΅λλ€. κΆνμ μμ²νλ©΄ μ¬μ©μμκ² ν둬ννΈκ° νμλ©λλ€.denied: μ¬μ©μκ° κΆνμ κ±°λΆνμ΅λλ€.onchange: κΆν μνκ° λ³κ²½λ λ νΈμΆλλ μ΄λ²€νΈ νΈλ€λ¬μ λλ€. μ΄λ₯Ό ν΅ν΄ μΉμ¬μ΄νΈλquery()λ©μλλ₯Ό κ³μ ν΄λ§νμ§ μκ³ λ κΆν μνμ λ³νμ λ°μν μ μμ΅λλ€.
μΌλ°μ μΈ κΆνκ³Ό μ¬μ© μ¬λ‘
Permissions APIλ λ€μν κΆνμ μ§μνλ©°, κ° κΆνμ νΉμ λΈλΌμ°μ κΈ°λ₯ λ° μ¬μ©μ λ°μ΄ν°μ κ΄λ ¨μ΄ μμ΅λλ€. κ°μ₯ μΌλ°μ μΌλ‘ μ¬μ©λλ κΆν μ€ μΌλΆλ λ€μκ³Ό κ°μ΅λλ€:1. μμΉ μ 보(Geolocation)
geolocation κΆνμ μΉμ¬μ΄νΈκ° μ¬μ©μμ μμΉμ μ κ·Όν μ μλλ‘ νμ©ν©λλ€. μ΄λ μ§λ μ ν리μΌμ΄μ
, μ§μ κ²μ, νκ² κ΄κ³ μ κ°μ μμΉ κΈ°λ° μλΉμ€λ₯Ό μ 곡νλ λ° μ μ©ν©λλ€.
μμ: μ°¨λ 곡μ μ±μ μ¬μ©μμ νμ¬ μμΉλ₯Ό νμ νκ³ κ·Όμ² μ΄μ μλ₯Ό μ°ΎκΈ° μν΄ μμΉ μ 보λ₯Ό μ¬μ©ν©λλ€. μμμ μ°ΎκΈ° μ±μ μ¬μ©μ κ·Όμ²μ μμμ μ 보μ¬μ£ΌκΈ° μν΄ μ¬μ©ν©λλ€. λ μ¨ μ±μ μ§μ λ μ¨ μ 보λ₯Ό 보μ¬μ£ΌκΈ° μν΄ μ¬μ©ν©λλ€.
2. μΉ΄λ©λΌ(Camera)
camera κΆνμ μΉμ¬μ΄νΈκ° μ¬μ©μμ μΉ΄λ©λΌμ μ κ·Όν μ μλλ‘ νμ©ν©λλ€. μ΄λ νμ νμ, μ΄λ―Έμ§ μΊ‘μ², μ¦κ° νμ€ μ ν리μΌμ΄μ
μ μ¬μ©λ©λλ€.
μμ: Zoomμ΄λ Google Meetκ³Ό κ°μ νμ νμ νλ«νΌμ μΉ΄λ©λΌ μ κ·Ό κΆνμ΄ νμν©λλ€. μ¬μ§ νΈμ§ μΉμ¬μ΄νΈλ μ¬μ©μκ° κΈ°κΈ° μΉ΄λ©λΌμμ μ§μ μ¬μ§μ μ λ‘λν μ μλλ‘ μΉ΄λ©λΌ μ κ·Όμ΄ νμν©λλ€. μ¨λΌμΈ κ΅μ‘ νλ«νΌμ μλ°©ν₯ μμ λ° νμ λ°νλ₯Ό μν΄ μ΄λ₯Ό μ¬μ©ν©λλ€.
3. λ§μ΄ν¬(Microphone)
microphone κΆνμ μΉμ¬μ΄νΈκ° μ¬μ©μμ λ§μ΄ν¬μ μ κ·Όν μ μλλ‘ νμ©ν©λλ€. μ΄λ μμ± μ±ν
, μ€λμ€ λ
Ήμ, μμ± μΈμμ μ¬μ©λ©λλ€.
μμ: Google μ΄μμ€ν΄νΈλ Siriμ κ°μ μμ± λΉμλ λ§μ΄ν¬ μ κ·Ό κΆνμ΄ νμν©λλ€. μ¨λΌμΈ μΈμ΄ νμ΅ μ±μ λ°μ μ°μ΅μ μν΄ λ§μ΄ν¬ μ κ·Όμ μ¬μ©ν©λλ€. μμ λ Ήμ μΉμ¬μ΄νΈλ μ¬μ©μ λ§μ΄ν¬μμ μ€λμ€λ₯Ό μΊ‘μ²νκΈ° μν΄ μ΄λ₯Ό μ¬μ©ν©λλ€.
4. μλ¦Ό(Notifications)
notifications κΆνμ μΉμ¬μ΄νΈκ° μ¬μ©μμκ² νΈμ μλ¦Όμ λ³΄λΌ μ μλλ‘ νμ©ν©λλ€. μ΄λ μ
λ°μ΄νΈ, κ²½κ³ , μλ¦Όμ μ 곡νλ λ° μ¬μ©λ©λλ€.
μμ: λ΄μ€ μΉμ¬μ΄νΈλ μ보λ₯Ό μ¬μ©μμκ² μ리기 μν΄ μλ¦Όμ μ¬μ©ν©λλ€. μ μ μκ±°λ μΉμ¬μ΄νΈλ μ£Όλ¬Έ μ λ°μ΄νΈ λ° νλ‘λͺ¨μ μ μ¬μ©μμκ² μ리기 μν΄ μλ¦Όμ μ¬μ©ν©λλ€. μμ λ―Έλμ΄ νλ«νΌμ μλ‘μ΄ λ©μμ§ λ° νλμ μ¬μ©μμκ² μ리기 μν΄ μλ¦Όμ μ¬μ©ν©λλ€.
5. νΈμ(Push)
μλ¦Όκ³Ό λ°μ νκ² κ΄λ ¨λ push κΆνμ μΉμ¬μ΄νΈκ° λΈλΌμ°μ μμ νμ± μνκ° μλ λλ μλ²λ‘λΆν° νΈμ λ©μμ§λ₯Ό μμ ν μ μκ² ν©λλ€. μ΄λ₯Ό μν΄μλ μλΉμ€ μ컀(service worker)κ° νμν©λλ€.
μμ: μ±ν μ ν리μΌμ΄μ μ λΈλΌμ°μ νμ΄ λ«ν μμ λλ μ¬μ©μμκ² μ λ©μμ§λ₯Ό μ리기 μν΄ νΈμ μλ¦Όμ μ¬μ©ν μ μμ΅λλ€. μ΄λ©μΌ μ 곡μ 체λ μ μ΄λ©μΌμ μ¬μ©μμκ² μ리기 μν΄ νΈμ μλ¦Όμ μ¬μ©ν μ μμ΅λλ€. μ€ν¬μΈ μ±μ μ€μκ° κ²½κΈ° μ μλ₯Ό μ¬μ©μμκ² μ λ°μ΄νΈνκΈ° μν΄ νΈμ μλ¦Όμ μ¬μ©ν©λλ€.
6. λ―Έλ(Midi)
midi κΆνμ μΉμ¬μ΄νΈκ° μ¬μ©μμ μ»΄ν¨ν°μ μ°κ²°λ MIDI μ₯μΉμ μ κ·Όν μ μλλ‘ νμ©ν©λλ€. μ΄λ μμ
μ μ λ° μ°μ£Ό μ ν리μΌμ΄μ
μ μ¬μ©λ©λλ€.
μμ: Soundtrapκ³Ό κ°μ μ¨λΌμΈ μμ μ μ μννΈμ¨μ΄λ MIDI ν€λ³΄λ λ° μ»¨νΈλ‘€λ¬λ‘λΆν° μ λ ₯μ λ°κΈ° μν΄ MIDI κΆνμ μ¬μ©ν©λλ€. μμ νμ΅ μ ν리μΌμ΄μ μ μ κΈ°μ λν νμμ μ°μ£Όλ₯Ό μΆμ νκΈ° μν΄ MIDIλ₯Ό μ¬μ©ν©λλ€. κ°μ μ λμ¬μ΄μ μ κΈ°λ μ€μκ° μ¬μ΄λ μ‘°μμ μν΄ MIDIλ₯Ό νμ©ν©λλ€.
7. ν΄λ¦½λ³΄λ μ½κΈ°(Clipboard-read) λ° μ°κΈ°(Clipboard-write)
μ΄λ¬ν κΆνμ μ¬μ©μμ ν΄λ¦½λ³΄λμ λν μ κ·Όμ μ μ΄νμ¬ μΉμ¬μ΄νΈκ° λ°μ΄ν°λ₯Ό μ½κ³ μΈ μ μλλ‘ ν©λλ€. μ΄ κΆνλ€μ μΉ μ ν리μΌμ΄μ κ³Ό μνΈ μμ©ν λ μ¬μ©μ κ²½νμ ν₯μμν€μ§λ§, κ°μΈμ 보 λ³΄νΈ λ¬Έμ λ‘ μΈν΄ μ μ€νκ² μ²λ¦¬ν΄μΌ ν©λλ€.
μμ: μ¨λΌμΈ λ¬Έμ νΈμ§κΈ°λ μ¬μ©μκ° μμ μλ ν μ€νΈλ₯Ό ν΄λ¦½λ³΄λλ‘ μ½κ² 볡μ¬ν μ μλλ‘ `clipboard-write`λ₯Ό μ¬μ©νκ³ , ν΄λ¦½λ³΄λμ μ½ν μΈ λ₯Ό λ¬Έμμ λΆμ¬λ£μ μ μλλ‘ `clipboard-read`λ₯Ό μ¬μ©ν μ μμ΅λλ€. μ½λ νΈμ§κΈ°λ μ½λ μ€λν«μ 볡μ¬-λΆμ¬λ£κΈ° μν΄ μ΄ κΆνλ€μ μ¬μ©ν μ μμ΅λλ€. μμ λ―Έλμ΄ νλ«νΌμ λ§ν¬ λ³΅μ¬ λ° κ³΅μ λ₯Ό μ©μ΄νκ² νκΈ° μν΄ ν΄λ¦½λ³΄λ μ κ·Όμ μ¬μ©ν©λλ€.
Permissions API ꡬννκΈ°: λ¨κ³λ³ κ°μ΄λ
Permissions APIλ₯Ό ν¨κ³Όμ μΌλ‘ μ¬μ©νλ €λ©΄ λ€μ λ¨κ³λ₯Ό λ°λ₯΄μμμ€:
1. API μ§μ μ¬λΆ κ°μ§
Permissions APIλ₯Ό μ¬μ©νκΈ° μ μ μ¬μ©μμ λΈλΌμ°μ μμ μ§μλλμ§ νμΈνμμμ€.
if ('permissions' in navigator) {
// Permissions APIκ° μ§μλ¨
console.log('Permissions APIκ° μ§μλ©λλ€.');
} else {
// Permissions APIκ° μ§μλμ§ μμ
console.log('Permissions APIκ° μ§μλμ§ μμ΅λλ€.');
}
2. κΆν μν 쿼리
navigator.permissions.query()λ₯Ό μ¬μ©νμ¬ κΆνμ νμ¬ μνλ₯Ό νμΈνμμμ€.
navigator.permissions.query({ name: 'geolocation' })
.then(function(result) {
// κΆν μν μ²λ¦¬
});
3. κΆν μν μ²λ¦¬
PermissionStatus κ°μ²΄μ state μμ±μ κΈ°λ°μΌλ‘ μ μ ν μ‘°μΉλ₯Ό κ²°μ νμμμ€.
navigator.permissions.query({ name: 'geolocation' })
.then(function(result) {
if (result.state === 'granted') {
// κΆνμ΄ λΆμ¬λ¨
// κΈ°λ₯ μ¬μ© μ§ν
navigator.geolocation.getCurrentPosition(successCallback, errorCallback);
} else if (result.state === 'prompt') {
// κΆν μμ²μ΄ νμν¨
// ν΄λΉ κΈ°λ₯μ΄ νμν κΈ°λ₯μ μ¬μ©νμ¬ κΆν μμ²
navigator.geolocation.getCurrentPosition(successCallback, errorCallback);
} else if (result.state === 'denied') {
// κΆνμ΄ κ±°λΆλ¨
// κΈ°λ₯μ΄ μ μ¬μ©ν μ μλμ§ μ€λͺ
νλ λ©μμ§λ₯Ό μ¬μ©μμκ² νμ
console.log('μμΉ μ 보 κΆνμ΄ κ±°λΆλμμ΅λλ€. λΈλΌμ°μ μ€μ μμ νμ±νν΄μ£ΌμΈμ.');
}
});
4. κΆν λ³κ²½μ λμ
onchange μ΄λ²€νΈ νΈλ€λ¬λ₯Ό μ¬μ©νμ¬ κΆν μνμ λ³κ²½μ μμ νμμμ€.
navigator.permissions.query({ name: 'geolocation' })
.then(function(result) {
result.onchange = function() {
console.log('κΆν μνκ° ' + result.state + '(μΌ)λ‘ λ³κ²½λμμ΅λλ€.');
// μλ‘μ΄ κΆν μνμ λ°λΌ UI λλ μ ν리μΌμ΄μ
λ‘μ§ μ
λ°μ΄νΈ
};
});
κΆν κ΄λ¦¬λ₯Ό μν λͺ¨λ² μ¬λ‘
ν¨κ³Όμ μΈ κΆν κ΄λ¦¬λ μ¬μ©μμμ μ λ’°λ₯Ό ꡬμΆνκ³ κΈμ μ μΈ μ¬μ©μ κ²½νμ 보μ₯νλ λ° λ§€μ° μ€μν©λλ€. λ€μμ λ°λΌμΌ ν λͺ κ°μ§ λͺ¨λ² μ¬λ‘μ λλ€:
1. μν©μ λ§κ² κΆν μμ²
μ¬μ©μκ° ν΄λΉ κΆνμ΄ νμν κΈ°λ₯μ μ¬μ©νλ €κ³ ν λλ§ κΆνμ μμ²νμμμ€. μ΄λ λ§₯λ½μ μ 곡νκ³ μ¬μ©μκ° μ κΆνμ΄ νμνμ§ μ΄ν΄νλ λ° λμμ΄ λ©λλ€.
μμ: νμ΄μ§κ° λ‘λλ λ μΉ΄λ©λΌ μ κ·Όμ μμ²νλ λμ , μ¬μ©μκ° νμ ν΅νλ₯Ό μμνκΈ° μν΄ λ²νΌμ ν΄λ¦ν λ μμ²νμμμ€.
2. λͺ νν μ€λͺ μ 곡
μ¬μ©μμκ² μ κΆνμ΄ νμνκ³ μ΄λ»κ² μ¬μ©λ κ²μΈμ§ λͺ ννκ² μ€λͺ νμμμ€. μ΄λ μ λ’°λ₯Ό ꡬμΆνκ³ μ¬μ©μκ° κΆνμ λΆμ¬νλλ‘ μ₯λ €νλ λ° λμμ΄ λ©λλ€.
μμ: μμΉ μ 보λ₯Ό μμ²νκΈ° μ μ "μ£Όλ³ μμμ μ 보μ¬μ£ΌκΈ° μν΄ μμΉ μ λ³΄κ° νμν©λλ€."μ κ°μ λ©μμ§λ₯Ό νμνμμμ€.
3. κΆν κ±°λΆλ₯Ό μ°μνκ² μ²λ¦¬
μ¬μ©μκ° κΆνμ κ±°λΆνλλΌλ ν¬κΈ°νμ§ λ§μμμ€. μ ν΄λΉ κΈ°λ₯μ μ¬μ©ν μ μλμ§ μ€λͺ νκ³ λΈλΌμ°μ μ€μ μμ κΆνμ νμ±ννλ λ°©λ²μ λν μ§μΉ¨μ μ 곡νμμμ€. κ±°λΆλ κΆνμ΄ νμ μλ λμμ μΈ ν΄κ²°μ± μ μ 곡νλ κ²μ κ³ λ €νμμμ€.
μμ: μ¬μ©μκ° μμΉ μ 보λ₯Ό κ±°λΆνλ©΄, λμ μλμΌλ‘ μμΉλ₯Ό μ λ ₯νλλ‘ μ μνμμμ€.
4. κΆν μμ² μ΅μν
μ ν리μΌμ΄μ μ΄ μλνλ λ° μ λμ μΌλ‘ νμν κΆνλ§ μμ²νμμμ€. 미리 κΆνμ μμ²νκ±°λ μ¦μ νμνμ§ μμ κΆνμ μμ²νλ κ²μ νΌνμμμ€. μ ν리μΌμ΄μ μ΄ μμ²νλ κΆνμ μ κΈ°μ μΌλ‘ κ²ν νμ¬ μ¬μ ν νμνμ§ νμΈνμμμ€.
5. μ¬μ©μ κ°μΈμ 보 μ‘΄μ€
μ¬μ©μ λ°μ΄ν°κ° μ΄λ»κ² μμ§, μ¬μ©, μ μ₯λλμ§μ λν΄ ν¬λͺ νκ² κ³΅κ°νμμμ€. μ¬μ©μμκ² μμ μ λ°μ΄ν°μ λν μ μ΄κΆμ μ 곡νκ³ λ°μ΄ν° μμ§μ κ±°λΆν μ μλλ‘ νμμμ€. GDPR λ° CCPAμ κ°μ κ΄λ ¨ κ°μΈμ 보 λ³΄νΈ κ·μ μ μ€μνμμμ€.
6. μκ°μ μ νΈ μ 곡
μΉ΄λ©λΌλ λ§μ΄ν¬μ κ°μ΄ κΆνμΌλ‘ 보νΈλλ κΈ°λ₯μ μ¬μ©ν λ, ν΄λΉ κΈ°λ₯μ΄ νμ±νλμμμ μ¬μ©μμκ² μκ°μ μΌλ‘ μλ €μ£Όλ μ νΈλ₯Ό μ 곡νμμμ€. μ΄λ μμ μμ΄μ½μ΄λ νμλ±μ΄ λ μ μμ΅λλ€. μ΄λ ν¬λͺ μ±μ 보μ₯νκ³ μ¬μ©μκ° μμ μ κΈ°κΈ°κ° λ°μ΄ν°λ₯Ό μ κ·Ήμ μΌλ‘ λ Ήννκ±°λ μ μ‘νκ³ μλ€λ μ¬μ€μ λͺ¨λ₯΄λ κ²μ λ°©μ§ν©λλ€.
보μ κ³ λ € μ¬ν
Permissions API μ체λ μ¬μ©μκ° μΉμ¬μ΄νΈκ° μ κ·Όν μ μλ λ°μ΄ν°λ₯Ό μ μ΄ν μ μλλ‘ ν¨μΌλ‘μ¨ λ³΄μ κ³μΈ΅μ μ 곡ν©λλ€. κ·Έλ¬λ κ°λ°μλ μ¬μ ν μ μ¬μ μΈ λ³΄μ μνμ μΈμ§νκ³ μ΄λ₯Ό μννκΈ° μν μ‘°μΉλ₯Ό μ·¨ν΄μΌ ν©λλ€.
1. μμ ν λ°μ΄ν° μ μ‘
νμ HTTPSλ₯Ό μ¬μ©νμ¬ μΉμ¬μ΄νΈμ μλ² κ°μ μ μ‘λλ λ°μ΄ν°λ₯Ό μνΈννμμμ€. μ΄λ μ¬μ©μ λ°μ΄ν°λ₯Ό λμ² λ° λ³μ‘°λ‘λΆν° 보νΈν©λλ€.
2. μ¬μ©μ μ λ ₯ μ ν¨μ± κ²μ¬
κ΅μ°¨ μ¬μ΄νΈ μ€ν¬λ¦½ν (XSS) 곡격μ λ°©μ§νκΈ° μν΄ λͺ¨λ μ¬μ©μ μ λ ₯μ κ²μ¦νμμμ€. μ΄λ μμΉ μ 보λ μΉ΄λ©λΌ μ κ·Όκ³Ό κ°μ κΆνμ ν΅ν΄ μ»μ λ°μ΄ν°λ₯Ό μ²λ¦¬ν λ νΉν μ€μν©λλ€.
3. λ°μ΄ν° μμ νκ² μ μ₯
μ¬μ©μ λ°μ΄ν°λ₯Ό μ μ₯ν΄μΌ νλ κ²½μ°, μνΈν λ° μ κ·Ό μ μ΄λ₯Ό μ¬μ©νμ¬ μμ νκ² μ μ₯νμμμ€. PCI DSSμ κ°μ κ΄λ ¨ λ°μ΄ν° 보μ νμ€μ μ€μνμμμ€.
4. μ κΈ°μ μΌλ‘ μμ‘΄μ± μ λ°μ΄νΈ
보μ μ·¨μ½μ μ ν¨μΉνκΈ° μν΄ μΉμ¬μ΄νΈμ μμ‘΄μ±μ μ΅μ μνλ‘ μ μ§νμμμ€. μ¬κΈ°μλ μλ°μ€ν¬λ¦½νΈ λΌμ΄λΈλ¬λ¦¬, νλ μμν¬ λ° μλ² μΈ‘ μννΈμ¨μ΄κ° ν¬ν¨λ©λλ€.
5. μ½ν μΈ λ³΄μ μ μ± (CSP) ꡬν
CSPλ₯Ό μ¬μ©νμ¬ λΈλΌμ°μ κ° λ¦¬μμ€λ₯Ό λ‘λν μ μλ μμ€λ₯Ό μ ννμμμ€. μ΄λ XSS 곡격 λ° κΈ°ν μ νμ μ μ± μ½λ μ£Όμ μ λ°©μ§νλ λ° λμμ΄ λ©λλ€.
ν¬λ‘μ€ λΈλΌμ°μ νΈνμ±
Permissions APIλ Chrome, Firefox, Safari, Edgeλ₯Ό ν¬ν¨ν νλ λΈλΌμ°μ μμ λ리 μ§μλ©λλ€. κ·Έλ¬λ λΈλΌμ°μ λ§λ€ ꡬνμ΄λ λμμ μ½κ°μ μ°¨μ΄κ° μμ μ μμ΅λλ€. νΈνμ±κ³Ό μΌκ΄λ μ¬μ©μ κ²½νμ 보μ₯νκΈ° μν΄ λ€μν λΈλΌμ°μ μμ ꡬνμ ν μ€νΈνλ κ²μ΄ μ€μν©λλ€.
1. κΈ°λ₯ κ°μ§
Permissions APIλ₯Ό μ¬μ©νκΈ° μ μ νμ κΈ°λ₯ κ°μ§λ₯Ό μ¬μ©νμ¬ μ§μλλμ§ νμΈνμμμ€.
if ('permissions' in navigator) {
// Permissions APIκ° μ§μλ¨
// API μ¬μ© μ§ν
} else {
// Permissions APIκ° μ§μλμ§ μμ
// λμμ μΈ ν΄κ²°μ±
μ μ 곡νκ±°λ κΈ°λ₯ λΉνμ±ν
}
2. ν΄λ¦¬ν(Polyfills)
Permissions APIλ₯Ό κΈ°λ³Έμ μΌλ‘ μ§μνμ§ μλ ꡬν λΈλΌμ°μ λ₯Ό μ§μν΄μΌ νλ κ²½μ°, ν΄λ¦¬ν μ¬μ©μ κ³ λ €νμμμ€. ν΄λ¦¬νμ ꡬν λΈλΌμ°μ μμ μ΅μ APIμ κΈ°λ₯μ μ 곡νλ μ½λ μ‘°κ°μ λλ€.
3. λΈλΌμ°μ λ³ κ³ λ € μ¬ν
λΈλΌμ°μ λ³ νΉμ΄μ μ΄λ μ ν μ¬νμ μΈμ§νμμμ€. μμΈν λ΄μ©μ ν΄λΉ λΈλΌμ°μ μ λ¬Έμλ₯Ό μ°Έμ‘°νμμμ€.
κΆν κΈ°λ° μΉ μ ν리μΌμ΄μ μ μ
λ§μ νλ μΉ μ ν리μΌμ΄μ μ νλΆνκ³ λ§€λ ₯μ μΈ μ¬μ©μ κ²½νμ μ 곡νκΈ° μν΄ Permissions APIμ μμ‘΄ν©λλ€. λ€μμ λͺ κ°μ§ μμ λλ€:
1. μ§λ μ ν리μΌμ΄μ
Google μ§λ λ° OpenStreetMapκ³Ό κ°μ μ§λ μ ν리μΌμ΄μ μ μμΉ μ 보 κΆνμ μ¬μ©νμ¬ μ¬μ©μμ νμ¬ μμΉλ₯Ό νμνκ³ κΈΈμ°ΎκΈ°λ₯Ό μ 곡ν©λλ€. μ¬μ©μκ° "λ΄ μμΉ μ°ΎκΈ°" λ²νΌμ ν΄λ¦νκ±°λ μμΉ κ²μμ μ λ ₯ν λ κΆνμ μμ²ν©λλ€.
2. νμ νμ νλ«νΌ
Zoom, Google Meet, Microsoft Teamsμ κ°μ νμ νμ νλ«νΌμ μΉ΄λ©λΌ λ° λ§μ΄ν¬ κΆνμ μ¬μ©νμ¬ λΉλμ€ λ° μ€λμ€ ν΅μ μ κ°λ₯νκ² ν©λλ€. μ¬μ©μκ° νμλ₯Ό μμνκ±°λ μ°Έμ¬ν λ κΆνμ μμ²ν©λλ€.
3. μμ λ―Έλμ΄ νλ«νΌ
Facebook, Instagram, Twitterμ κ°μ μμ λ―Έλμ΄ νλ«νΌμ μ¬μ©μκ° μ¬μ§κ³Ό λΉλμ€λ₯Ό μ λ‘λν μ μλλ‘ μΉ΄λ©λΌ κΆνμ μ¬μ©ν©λλ€. μ¬μ©μκ° "μ λ‘λ" λ²νΌμ ν΄λ¦νκ±°λ μΉ΄λ©λΌ κ΄λ ¨ κΈ°λ₯μ μ¬μ©νλ €κ³ ν λ κΆνμ μμ²ν©λλ€. λν Notifications APIλ₯Ό νμ©νμ¬ μ¬μ©μμκ² μ€μκ° μ λ°μ΄νΈλ₯Ό λ³΄λΌ μλ μμ΅λλ€.
4. μμ± λΉμ
Google μ΄μμ€ν΄νΈ, Siri, Alexaμ κ°μ μμ± λΉμλ μ¬μ©μ λͺ λ Ήμ λ£κΈ° μν΄ λ§μ΄ν¬ κΆνμ μ¬μ©ν©λλ€. μ¬μ©μκ° μμ± λΉμλ₯Ό νμ±νν λ κΆνμ μμ²ν©λλ€.
5. μ¦κ° νμ€ μ ν리μΌμ΄μ
μ¦κ° νμ€(AR) μ ν리μΌμ΄μ μ νμ€ μΈκ³μ λμ§νΈ μ½ν μΈ λ₯Ό κ²Ήμ³ νμνκΈ° μν΄ μΉ΄λ©λΌ κΆνμ μ¬μ©ν©λλ€. μ¬μ©μκ° AR κ²½νμ μμν λ κΆνμ μμ²ν©λλ€.
Permissions APIμ λ―Έλ
Permissions APIλ μΉμ λ³ννλ μꡬ μ¬νμ μΆ©μ‘±νκΈ° μν΄ μ§μμ μΌλ‘ λ°μ νκ³ μμ΅λλ€. ν₯ν κ°λ°μλ λ€μμ΄ ν¬ν¨λ μ μμ΅λλ€:
- μλ‘μ΄ κΆν: μλ‘μ΄ λΈλΌμ°μ κΈ°λ₯ λ° νλμ¨μ΄ κΈ°λ₯μ μ κ·ΌνκΈ° μν μλ‘μ΄ κΆν μ§μ μΆκ°.
- κ°μ λ μ¬μ©μ μΈν°νμ΄μ€: μ¬μ©μμκ² λ λ§μ λ§₯λ½κ³Ό ν¬λͺ μ±μ μ 곡νκΈ° μν΄ λΈλΌμ°μ μ κΆν μμ² UI ν₯μ.
- λ μΈλΆνλ μ μ΄: νΉμ μΉμ¬μ΄νΈλ κΈ°κ°μΌλ‘ μ κ·Όμ μ ννλ κΈ°λ₯κ³Ό κ°μ΄ μ¬μ©μκ° λΆμ¬νλ κΆνμ λν΄ λ μΈλ°ν μ μ΄κΆ μ 곡.
- κ°μΈμ 보 λ³΄νΈ κ°ν κΈ°μ κ³Όμ ν΅ν©: μ¬μ©μ λ°μ΄ν°λ₯Ό 보νΈνκΈ° μν΄ Permissions APIλ₯Ό μ°¨λΆ νλΌμ΄λ²μ λ° μ°ν© νμ΅κ³Ό κ°μ λ€λ₯Έ κ°μΈμ 보 λ³΄νΈ κ°ν κΈ°μ κ³Ό κ²°ν©.
κ²°λ‘
Permissions APIλ μΉ κ°λ°μμκ² νμμ μΈ λꡬλ‘, μ¬μ©μ κ°μΈμ 보λ₯Ό μ‘΄μ€νλ©΄μ κ°λ ₯νκ³ λ§€λ ₯μ μΈ μΉ μ ν리μΌμ΄μ μ λ§λ€ μ μκ² ν΄μ€λλ€. Permissions APIμ ν΅μ¬ κ°λ μ μ΄ν΄νκ³ κΆν κ΄λ¦¬μ λν λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄λ©΄, κ°λ°μλ μ¬μ©μμμ μ λ’°λ₯Ό ꡬμΆνκ³ κΈμ μ μΈ μ¬μ©μ κ²½νμ μ 곡ν μ μμ΅λλ€. μΉμ΄ κ³μ λ°μ ν¨μ λ°λΌ, Permissions APIλ μμ νκ³ κ°μΈμ 보λ₯Ό μ‘΄μ€νλ μ¨λΌμΈ νκ²½μ 보μ₯νλ λ° μ μ λ μ€μν μν μ ν κ²μ λλ€. μΉ μ ν리μΌμ΄μ μμ κΆνμ μμ²νκ³ κ΄λ¦¬ν λ νμ μ¬μ©μ κ°μΈμ 보 보νΈμ ν¬λͺ μ±μ μ°μ μν΄μΌ ν¨μ κΈ°μ΅νμμμ€.